﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Configuration;
using System.Text;
using System.IO;
using GS1.Entidad;
using ServirRFID2;

namespace ServirRFID2.Helper
{
    /// <summary>
    /// Clase       : EmailHelper
    /// Descripcion : Permite enviar correos
    /// Autor       : Pedro Miguel Vera Rafael
    /// Fecha       : 06/07/2012
    /// Empresa     : GS1 Peru
    /// <summary>
    public class EmailHelper
    {
        #region --- Variables ---
        // Parametros de Correo
        private const string SERVIDOR_SMTP = "ServidorSMTP";
        private const string SERVIDOR_PUERTO = "ServidorPuerto";
        private const string SERVIDOR_SSL = "ServidorSSL";

        private const string CORREO_DIRECCION = "CorreoDireccion";
        private const string CORREO_DIRECCION_NOMBRE = "CorreoDireccionNombre";
        
        private const string CORREO_USUARIO = "CorreoUsuario";
        private const string CORREO_CLAVE = "CorreoClave";
        private const string CORREO_ENCODING = "CorreoEncoding";

        private const string CORREO_ASUNTO = "CorreoAsunto";
        private const string CORREO_CONTENIDO = "CorreoContenido";
        private const string CORREO_CONTENIDO1 = "CorreoContenido1";
        private const string CORREO_CONTENIDO2 = "CorreoContenido2";

        private const string NOMBRE_TAG_TOKENCARDS = "{TOKENCARDS}";
        #endregion

        #region --- Metodos Propios ---
        //public static bool enviarNotificacion(Sede sede)
        //{
        //    bool resultado = false;
        //    SmtpClient correoCliente = null;
        //    MailMessage correoMensaje = null;

        //    try
        //    {
        //        // Se instancia variables del cliente y mensaje de correo
        //        correoCliente = new SmtpClient();
        //        correoMensaje = new MailMessage();

        //        // Correo de Vendedor Cards
        //        correoMensaje.From = new MailAddress(ConfigurationManager.AppSettings[CORREO_DIRECCION],
        //                                             ConfigurationManager.AppSettings[CORREO_DIRECCION_NOMBRE]);

        //        // Se establece el asunto del Correo
        //        correoMensaje.Subject = ConfigurationManager.AppSettings[CORREO_ASUNTO];

        //        foreach (SedeResponsable responsable in sede.listaSedeResponsable)
        //        {
        //            // Se establece Correo de responsables
        //            correoMensaje.To.Add(new MailAddress(responsable.correo));
        //        }

        //        // Se establece alta prioridad al correo
        //        correoMensaje.Priority = MailPriority.High;

        //        // Se establece el formato del encoding del cuerpo y asunto
        //        correoMensaje.BodyEncoding = Encoding.GetEncoding(ConfigurationManager.AppSettings[CORREO_ENCODING]);
        //        correoMensaje.SubjectEncoding = Encoding.GetEncoding(ConfigurationManager.AppSettings[CORREO_ENCODING]);

        //        // Se establece que cuerpo del mensaje acepta HTML
        //        correoMensaje.IsBodyHtml = true;

        //        // Se carga los datos de un archivo para el cuerpo del correo
        //        string cuerpoMensaje = ConfigurationManager.AppSettings[CORREO_CONTENIDO];

        //        // Se establece los datos del cuerpo
        //        correoMensaje.Body = cuerpoMensaje;

        //        // Se establecen Parametros del servidor de correos
        //        correoCliente.Host = ConfigurationManager.AppSettings[SERVIDOR_SMTP];
        //        correoCliente.Port = Convert.ToInt32(ConfigurationManager.AppSettings[SERVIDOR_PUERTO]);
        //        correoCliente.EnableSsl = ConfigurationManager.AppSettings[SERVIDOR_SSL].ToString().Equals(Constantes.SI) ? true : false;
        //        correoCliente.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings[CORREO_USUARIO],
        //                                                                     ConfigurationManager.AppSettings[CORREO_CLAVE]);

        //        // Ejecucion de envio de Correo
        //        correoCliente.Send(correoMensaje);
        //        resultado = true;

        //    }
        //    finally { correoCliente = null; correoMensaje = null; }

        //    return resultado;
        //}

        public static bool enviarNotificacion(Sede sede, Etiqueta etiqueta)
        {
            bool resultado = false;
            SmtpClient correoCliente = null;
            MailMessage correoMensaje = null;

            try
            {
                // Se instancia variables del cliente y mensaje de correo
                correoCliente = new SmtpClient();
                correoMensaje = new MailMessage();

                // Correo de Princial Cards
                correoMensaje.From = new MailAddress(ConfigurationManager.AppSettings[CORREO_DIRECCION],
                                                     ConfigurationManager.AppSettings[CORREO_DIRECCION_NOMBRE]);

                // Se establece el asunto del Correo
                correoMensaje.Subject = ConfigurationManager.AppSettings[CORREO_ASUNTO];

                // Se establece Correo de responsables
                foreach (SedeResponsable responsable in sede.listaSedeResponsable)
                {
                    // Se establece Correo de responsables
                    correoMensaje.To.Add(new MailAddress(responsable.correo));
                }

                // Se establece alta prioridad al correo
                correoMensaje.Priority = MailPriority.High;

                // Se establece el formato del encoding del cuerpo y asunto
                correoMensaje.BodyEncoding = System.Text.Encoding.UTF8;
                correoMensaje.SubjectEncoding = System.Text.Encoding.UTF8;

                // Se establece que cuerpo del mensaje acepta HTML
                correoMensaje.IsBodyHtml = false;

                // Se carga los datos de un archivo para el cuerpo del correo
                //string cuerpoMensaje = ConfigurationManager.AppSettings[CORREO_CONTENIDO];
                string cuerpoMensaje = ConfigurationManager.AppSettings[CORREO_CONTENIDO1] + etiqueta.expediente.numero + "-" + etiqueta.expediente.anio + "-" + etiqueta.nroTomo.ToString() + " " + ConfigurationManager.AppSettings[CORREO_CONTENIDO2] + " " + sede.descripcion;

                // Se establece los datos del cuerpo
                correoMensaje.Body = cuerpoMensaje;

                // Se establecen Parametros del servidor de correos
                correoCliente.Host = ConfigurationManager.AppSettings[SERVIDOR_SMTP];
                correoCliente.Port = Convert.ToInt32(ConfigurationManager.AppSettings[SERVIDOR_PUERTO]);
                correoCliente.EnableSsl = ConfigurationManager.AppSettings[SERVIDOR_SSL].ToString().Equals(Constantes.SI) ? true : false;
                correoCliente.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings[CORREO_USUARIO],
                                                                             ConfigurationManager.AppSettings[CORREO_CLAVE]);

                // Ejecucion de envio de Correo
                correoCliente.Send(correoMensaje);
                resultado = true;

            }
            finally { correoCliente = null; correoMensaje = null; }

            return resultado;
        }
        #endregion
    }
}
